FROM php:8.2-fpm-alpine

USER root

WORKDIR /data

# 构建指定参数
# docker build -t fusion_mall:v-1 --build-arg USERID=1001 --build-arg USERNAME=www .

# linux 下解决文件挂在容器内外文件权限不一致问题
# USERID 用户id 对应的用户id
ARG USERID=1001
# USERNAME 用户名 必须主服务器存在的用户
ARG USERNAME=www

# https://getcomposer.org/versions 获取所有的 composer 版本
# https://getcomposer.org/download/2.8.1/composer.phar 下载指定版本
COPY ./composer/composer.phar /usr/local/bin/composer

# 解压php源代码
RUN docker-php-source extract \
    # 修改镜像地址
    && sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
    # 更新缓存
    && apk update \
    # 安装需要的基础包
    && apk add autoconf linux-headers libevent-dev openssl-dev zlib-dev libpng-dev freetype-dev libjpeg-turbo-dev gettext-dev icu-dev libxml2-dev libzip-dev \
    # 扩展源代码 下载 pecl 扩展 也可以提前下载好 COPY
    && cd /usr/src/php/ext \
    # 下载 redis 扩展到扩展源代码目录
    && wget https://pecl.php.net/get/redis-6.0.2.tgz && tar xvf redis-6.0.2.tgz && mv redis-6.0.2 redis \
    # 下载 igbinary 扩展到扩展源代码目录
    && wget https://pecl.php.net/get/igbinary-3.2.12.tgz && tar xvf igbinary-3.2.12.tgz && mv igbinary-3.2.12 igbinary \
    # 配置 gd 扩展
    && docker-php-ext-configure gd --enable-gd --with-freetype --with-jpeg \
    # 安装加载扩展
    && docker-php-ext-install -j$(nproc) pcntl sockets pdo_mysql gd exif bcmath gettext intl shmop soap sysvsem zip mysqli redis igbinary \
    # 开启 opcache
    && docker-php-ext-enable opcache \
    # 修改 composer 可执行
    && chmod a+x /usr/local/bin/composer \
    # 设置 composer 镜像仓库
    && composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ \
    # 切换到工作目录
    && cd /data \
    # 删除 php 源代码
    && docker-php-source delete \
    # 创建 www 用户并且指定 用户 id 根据实际情况创建 cat /etc/passwd 查看 工作进程用户
    && adduser -u ${USERID} -g "dockervolumesuser" -s /bin/sh -D ${USERNAME} \
    # 安装时区数据库
    && apk add tzdata \
    # 设置为 Asia/Shanghai
    && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

